Inner and outer code generator for volatile memory

ABSTRACT

A system includes a volatile memory to store data and a memory controller to manage the data in the volatile memory. The memory controller includes an inner code generator to generate a respective inner correction code for each of a plurality of blocks of the data in the volatile memory. An outer code generator generates an outer correction code based on the plurality of blocks of the data. The memory controller updates the outer correction code as part of a refresh to the plurality of blocks of the data in the volatile memory.

BACKGROUND

A memory controller is a digital circuit that manages the flow of datagoing to and from the processor's main memory. The memory controller canbe a separate chip or integrated into another chip such as being placedon the same die or as an integral part of a microprocessor. Memorycontrollers can include logic to read and write to dynamic random accessmemory (DRAM), and to “refresh” the DRAM. Without persistent refreshes,the DRAM will lose data written to it as the respective capacitorsforming memory elements in the DRAM leak their charge within a fractionof a second. Reading and writing to DRAM can be performed by selectingrow and column data addresses of the DRAM as the inputs to a multiplexercircuit, where a demultiplexer on the DRAM uses the converted inputs toselect the correct memory location and return stored data.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 illustrates an example system to generate inner and outercorrection codes to facilitate correction of multiple bit errors in avolatile memory.

FIG. 2 illustrates an example system to generate inner and outercorrection codes where a memory scrubber can correct multiple bit errorsin a volatile memory based on the correction codes.

FIG. 3 illustrates an example of a volatile memory having multiple datablocks where inner and outer correction codes are stored to facilitatecorrecting multiple bit errors in the data blocks.

FIG. 4 illustrates an example method to generate inner and outercorrection codes to facilitate correction of multiple bit errors in avolatile memory.

DETAILED DESCRIPTION

Systems and methods can detect and correct multiple bits errors. Forexample, multi-level correction codes are generated and stored for agiven block of data in the volatile memory that enables the system toboth detect and correct multiple bit errors from the block. An innercorrection code is generated based on the block of data to detect andcorrect single-bit errors within the block. The block of data caninclude one or more lines of data, each of which lines can include aninner correction code. The block of data, including the inner correctioncode, is processed to generate an outer correction code for the block,which is employed to correct multiple bit errors for the block.

As a further example, a system includes a memory controller to managethe data in the volatile memory. The memory controller includes an innercode generator to generate an inner correction code based on a block ofthe data (e.g., 64-bits or double word) in the volatile memory. Forexample, the inner correction code can be an error checking andcorrection code (ECC) that is stored within the block of data to correctsingle bit errors in the block. The memory controller also includes anouter code generator to generate an outer correction code based on theblock of data, where the previously processed block (or blocks) havingsingle correction codes, are collectively reprocessed to generate theouter correction code. In some examples, the outer correction code canbe generated using various coding techniques, such as including a paritycode, a Cycle Redundancy Check (CRC) code, a Hamming code, aBose-Chaudhuri-Hocquenghem (BCH) code, a low density parity check (LDPC)code, or a Reed-Solomon code. The memory controller updates the innercorrection code and the outer correction code as part of a refresh cyclefor the data in the volatile memory. The memory controller can alsoinclude a memory scrubber to operate, as in a background process, tocorrect single bit errors in the block of data via the inner correctioncode and to correct multiple bit errors in the block of data via theouter correction code. The memory scrubber could also update the outercodes when a flag indicates a partial block write occurred and the outercorrection code is not valid.

FIG. 1 illustrates an example system 100 to generate inner and outercorrection codes to facilitate correction of multiple bit errors in avolatile memory. The system 100 includes a volatile memory 110 to storedata and a memory controller 120 to manage the data in the volatilememory. The memory controller 120 includes an inner code generator 130to generate a respective inner correction code 134 (or codes) for eachof a plurality of blocks of the data 140 in the volatile memory 110. Anouter code generator 150 generates an outer correction code 154 based onthe plurality of blocks of the data 140, wherein the memory controller120 updates the outer correction code as part of a refresh to theplurality of blocks of the data in the volatile memory 110. As usedherein, memory refresh refers to the process of periodically readinginformation (e.g., one or more blocks of data, such as a cache line)from an area of computer memory and immediately rewriting the readinformation to the same area without modification, for the purpose ofpreserving the information.

The memory controller 120 in addition to performing refresh also caninitiate generating the inner correction code 134 and/or outercorrection code as part of the refresh process (e.g., before, during, orafter the refresh). In an example, the volatile memory 110 can be adynamic random access memory (DRAM). In addition to updating the innercode 134 and outer code 154, the memory controller 120 can also includea memory scrubber (see e.g., FIG. 2) to correct single bit errors viathe inner correction code 134 in the block of the data 140. The memoryscrubber can also correct multiple bit errors via the outer correctioncode 154 in the plurality of blocks of the data 140.

The plurality of the blocks of the data 140 can include one or morememory locations of a specified length. For example, the memorycontroller 120 can specify a length N of bytes for the plurality of theblocks of the data 140. If the memory controller 120 updates all N bytesfor the block of data 140, the inner correction code(s) 134 can beupdated for the N bytes and the outer correction code 154 can be updatedbased on the updates to the N bytes, where N is a positive integer. Ifthe memory controller 120 updates less than the length N of bytesspecified for the plurality of the blocks of the data 140, a flag can beset indicating the outer correction code 154 is invalid, where thememory scrubber monitors the flag and updates the outer correction codebased on the partial write initiated to the block of data. Also, theouter code generator 150 can update the outer correction code 154 andthe memory scrubber resets the flag to valid after the length of N byteshas been updated or read by the memory controller 120.

In one example, the memory controller 120 processes the block of data140 and generates error checking and correction codes (ECCs) as theinner correction code(s) 134 for each block of the data 140. In anotherexample, the outer code generator 150 processes plurality of the blocksof the data 140 and generates a parity code, a Cycle Redundancy Check(CRC) code, a Hamming code, a Bose-Chaudhuri-Hocquenghem (BCH) code, alow density parity check (LDPC) code, or a Reed-Solomon code as theouter correction code 154. Furthermore, the inner code generator 130 cangenerate an ECC code for the outer correction code 154 to facilitateerror correction of the outer correction code (see e.g., FIG. 3). Thememory controller 120 can be a cache memory controller that controlsmemory updates and refresh to the volatile memory, where the pluralityof the data blocks 140 form a respective cache line of the volatilememory.

The memory controller 120 can include various examples of refreshcircuitry to refresh the data. The refresh circuitry may include arefresh counter that contains the address of the row to be refreshedwhich is applied to the chip's row address lines, and a timer thatincrements the counter to step through the rows. The counter may be partof the memory controller 120, or on the memory chip itself. In oneexample, the refresh circuitry implements a burst refresh strategy thatincludes a series of refresh cycles that can be performed one afteranother until all the rows have been refreshed, after which normalmemory accesses occur until the next refresh is to be performed. Asanother example, the refresh circuitry implements a distributed refreshstrategy that operates to refresh the memory at regular intervals,interspersed with memory accesses.

FIG. 2 illustrates an example system 200 to generate inner and outercorrection codes where a memory scrubber can correct multiple bit errorsin a volatile memory based on the correction codes. The system 200includes a volatile memory 210 to store data. A memory controller 220refreshes the data in the volatile memory 210. The memory controller 220includes an inner code generator 230 to generate a plurality of innercorrection codes shown as ICC codes 1 though N based on a plurality ofdata blocks 1 though M in the volatile memory 210, where N and M arepositive integers. Each of the plurality of data blocks 1 though M isassigned to a separate one of the plurality of correction codes 1through N.

An outer code generator 240 generates an outer correction code 250 basedon collectively processing the plurality of data blocks 1 through M. Thememory controller updates the inner correction code 1 though N and theouter correction code 250 during the refresh to the data in the volatilememory 210. A memory scrubber 260 corrects single bit errors via theinner correction code 1 though N in the plurality of data blocks 1though M and corrects multiple bit errors via the outer correction code250 in the plurality of data blocks. As described previously, the memoryscrubber can monitor a flag indicating a partial memory write hasoccurred to a subset of the data blocks 1 though M and update the outercorrection code 250 based on the partial memory write. The memoryscrubber 260 can operate in the background of normal refresh operationsof the memory controller 220.

The outer correction code 250 can be stored with cache line data (in acache memory example) or in another location. This data may be stored onthe volatile memory (e.g., DRAM) and may not be normally be visibleuntil it is read to correct an error. The outer correction code can begenerated using any number of algorithms such as parity codes, a CycleRedundancy Check (CRC) codes, Hamming codes, BCH codes, Reed-Solomoncodes, low-density parity-check (LDPC) codes or other error correctioncode. The outer correction code 250 can also be generated somewherealong the path between the volatile memory 210 and the memory controller220. In an example, the outer correction code 250 can be generated byhardware from the processing of a cache line (or other designated memoryblock).

In another example, the outer correction code 250 can be generated whena full cache line is written back to the volatile memory 210. In anotherexample, the outer correction code 250 can be updated when partial cacheline writes are performed. For instance, a flag can be set by the memorycontroller 220 indicating when the outer correction code 250 is valid ornot valid. The memory scrubber 260 can update the outer correction code250 when partial cache line writes occurred and repair single bit errorsor multi-bit errors that are detected. The memory scrubber 260 can alsobe incorporated as part of the DRAM refresh process.

The outer correction code 250 can be written with cache line data, butin one example is read if there is an uncorrectable error in the cacheline memory data that is read. If an uncorrectable error (e.g.,multi-bit error) is detected along the path to memory controller 220,the outer correction code 250 can be read and the cache line datacorrected. In an example, the complete correction process can occurwithin a dual in-line memory module (DIMM) or along the path wherevolatile data is stored. The outer correction code 250 should havelittle impact on read latency to the volatile memory 210 as the outercorrection code should only be read when an uncorrectable error wasdetected. In another example, the outer correction code 250 can be usedto check the integrity of the data if any of the data within the coveredblock is read.

FIG. 3 illustrates an example of a volatile memory 300 having multipledata blocks where inner and outer correction codes are stored tofacilitate correcting multiple bit errors in the data blocks. Thevolatile memory 300 can be implemented as a cache line in this examplebut substantially any volatile memory implementation is possible. Inthis example, the cache line includes eight data blocks 310, 314, 320,324, 330, 334, 340, 34. More or less than eight data blocks can beemployed. Each of the data blocks 310 through 344 holds eight data bytesin this example, however more or less than eight data bytes can bespecified for a respective data block. Thus, in this example, the cacheline includes 64 bytes having eight rows of eight bytes. As shown, eachof the eight data bytes for a given data block has an ECC computed andstored which are shown as ECC bits 0 though 7 which are associated withbytes 310 through 344, respectively. The ECC bits ECC 0 through 7 areutilized to correct single bit errors in the respective data blocks 310through 344.

An outer correction code 350 is stored that is employed to correctmultiple bit errors detected within the data blocks 310 through 344.Multiple errors can be detected within a given data block 310 through344 or detected between data blocks where one error is detected in oneblock and another error is detected in another data block. An ECC 360can also be generated for the outer correction code 350 to allow forerror correction of the outer code. In another aspect, the outercorrection code 350 also protects and allows for the correction oferrors within the outer code. As described previously, the memorycontroller described herein includes an outer code generator to generatethe outer correction code 350 based on the blocks of data 310 through344, where the previously processed blocks having single correctioncodes ECC0 through 7, are collectively processed to generate the outercorrection code.

In some examples, the outer correction code 350 can be generated byprocessing the data blocks 310 through 344 using various codingtechniques, such as including a parity code, a Cycle Redundancy Check(CRC) code, a Hamming code, a Bose-Chaudhuri-Hocquenghem (BCH) code, alow density parity check (LDPC) code, or a Reed-Solomon code. The memorycontroller described herein can update the inner correction codes ECC 0though 7 and the outer correction code 350 as part of a refresh cyclefor the data in the volatile memory 300. The memory controller can alsoinclude a memory scrubber to operate, as in a background process, tocorrect single bit errors in the block of data via the inner correctioncode ECC 0 though 7, to correct multiple bit errors in the block of data310 through 344 via the outer correction code 350 and to make the outercorrection code valid after part of the data block has been updated.

In view of the foregoing structural and functional features describedabove, an example method will be better appreciated with reference toFIG. 4. While, for purposes of simplicity of explanation, the method isshown and described as executing serially, it is to be understood andappreciated that the method is not limited by the illustrated order, asparts of the method could occur in different orders and/or concurrentlyfrom that shown and described herein. Such method can be executed byvarious components configured as machine readable instructions stored inmemory and executable in an integrated circuit, controller, or aprocessor, for example.

FIG. 4 illustrates an example method 400 to generate inner and outercorrection codes to facilitate correction of multiple bit errors in avolatile memory. At 410, the method 400 includes generating an innercorrection code for each of a plurality of data blocks of volatilememory (e.g., via inner code generator 130 of FIG. 1 and 230 of FIG. 2).At 420, the method 400 includes generating an outer correction codebased on processing the plurality of data blocks collectively (e.g., viaouter code generator 150 of FIG. 1 and 240 of FIG. 2). At 430, themethod includes refreshing the volatile memory that includes theplurality of data blocks, the outer correction code being updated aspart of the refreshing (e.g., via memory controller 120 of FIG. 1 and220 of FIG. 2). At 440, the method 400 includes correcting a single biterror via the respective inner correction code in response to detectingthe single bit error in one of the plurality of data blocks (e.g., viamemory scrubber 260 of FIG. 2).

At 450, the method 400 includes correcting a multiple bit error via theouter correction code in response to detecting the multiple bit error ina given data block in the plurality of data blocks (e.g., via memoryscrubber 260 of FIG. 2). Although not shown, the method 400 can alsoinclude specifying a length N of bytes for the block of data, updatingall N bytes for the block of data, and updating the inner correctioncode for the N bytes and the outer correction code based on the updatingto the N bytes, where N is a positive integer. The method 400 can alsoinclude updating less than the length N of bytes specified for the blockof data and setting a flag indicating that a partial write has beeninitiated to the block of data and that the outer correction code isinvalid. The method 400 can also include updating the outer correctioncode and resetting the flag to valid after the length of N bytes hasbeen updated or read and a valid outer correction code determined.

What have been described above are examples. One of ordinary skill inthe art will recognize that many further combinations and permutationsare possible. Accordingly, this disclosure is intended to embrace allsuch alterations, modifications, and variations that fall within thescope of this application, including the appended claims. Additionally,where the disclosure or claims recite “a,” “an,” “a first,” or “another”element, or the equivalent thereof, it should be interpreted to includeone or more than one such element, neither requiring nor excluding twoor more such elements. As used herein, the term “includes” meansincludes but not limited to, and the term “including” means includingbut not limited to. The term “based on” means based at least in part on.

What is claimed is:
 1. A system, comprising: a volatile memory to storedata; a memory controller to manage the data in the volatile memory, thememory controller comprising: an inner code generator to generate arespective inner correction code for each of a plurality of blocks ofthe data in the volatile memory; an outer code generator to generate anouter correction code based on the plurality of blocks of the data,wherein the memory controller updates the outer correction code as partof a refresh to the plurality of blocks of the data in the volatilememory; and a memory scrubber to correct single bit errors via the innercorrection code in the plurality of blocks of the data and to correctmultiple bit errors via the outer correction code in the plurality ofblocks of the data; and wherein the memory controller specifies a lengthN of bytes for the plurality of blocks of the data, if the memorycontroller updates all N bytes for the plurality of blocks of the data,the inner correction code is updated for the N bytes and the outercorrection code is updated based on the updates to the N bytes, N beinga positive integer, the inner correction code and the outer correctioncode being updated as part of the refresh to the data.
 2. The system ofclaim 1, wherein if the memory controller updates less than the length Nof bytes specified for the plurality of blocks of data, a flag is setindicating the outer correction code is invalid and the memory scrubbermonitors the flag and updates the outer correction code based on thepartial write initiated to the plurality of blocks of the data.
 3. Thesystem of claim 2, wherein the outer code generator updates the outercorrection code and the memory scrubber resets the flag to valid afterthe length of N bytes has been updated or read by the memory controller.4. The system of claim 1, wherein the inner code generator processes theplurality of blocks of the data and generates an error checking andcorrection code (ECC) as the inner correction code for each block of thedata.
 5. The system of claim 4, wherein the outer code generatorprocesses the block of data and generates a parity code, a CycleRedundancy Check (CRC) code, a Hamming code, aBose-Chaudhuri-Hocquenghem (BCH) code, a low density parity check (LDPC)code, or a Reed-Solomon code as the outer correction code.
 6. The systemof claim 4, wherein the inner code generator generates the ECC for theouter correction code to facilitate error correction of the outercorrection code.
 7. The system of claim 6, wherein the memory controlleris a cache memory controller that controls memory updates and refresh tothe volatile memory, and wherein the plurality of blocks of the dataform a respective cache line of the volatile memory.
 8. The system ofclaim 7, wherein the volatile memory is a dynamic random access memory(DRAM).
 9. A method, comprising: generating an inner correction code foreach of a plurality of data blocks of volatile memory; generating anouter correction code based on processing the plurality of data blockscollectively; refreshing the volatile memory that includes the pluralityof data blocks, the outer correction code being updated as part of therefreshing; correcting a single bit error via the respective innercorrection code in response to detecting the single bit error in one ofthe plurality of data blocks; correcting a multiple bit error via theouter correction code in response to detecting the multiple bit error ina given data block in the plurality of data blocks; specifying a lengthN of bytes for the block of data, N being a positive integer; updatingall N bytes for the block of data; updating the inner correction codefor the N bytes and the outer correction code based on the updating tothe N bytes; updating less than the length N of bytes specified for theblock of data; and setting a flag indicating that a partial write hasbeen initiated to update the block of data and that the outer correctioncode is invalid.
 10. The method of claim 9, further comprising: updatingthe outer correction code and resetting the flag to valid after thelength of N bytes has been updated or read.
 11. A system, comprising: avolatile memory to store data; and a memory controller to manage thedata in the volatile memory, the memory controller comprising: an innercode generator to generate a plurality of inner correction codes basedon data values in each of a plurality of data blocks in the volatilememory, wherein each of the plurality of inner correction codes isassigned to correct a respective one of the plurality of data blocks; anouter code generator to generate an outer correction code based onprocessing the plurality of data blocks collectively, wherein the memorycontroller updates at least one of the inner correction code and theouter correction code during a refresh to the plurality of data blocksin the volatile memory; and a memory scrubber to correct single biterrors in a given one of the plurality of data blocks via its respectiveinner correction code and to correct multiple bit errors in theplurality data blocks via the outer correction code; and wherein thememory scrubber monitors a flag indicating a partial memory write hasoccurred to a subset of the data blocks and the outer code generatorupdates the outer correction code based on the partial memory write. 12.A system, comprising: a volatile memory to store data; and a memorycontroller to manage the data in the volatile memory, the memorycontroller comprising: an inner code generator to generate a respectiveinner correction code for each of a plurality of blocks of the data inthe volatile memory; and an outer code generator to generate an outercorrection code based on the plurality of blocks of the data, whereinthe memory controller updates the outer correction code as part of arefresh to the plurality of blocks of the data in the volatile memory;and wherein: the inner code generator processes the plurality of blocksof the data and generates an error checking and correction code (ECC) asthe inner correction code for each block of the data; and the inner codegenerator generates the ECC for the outer correction code to facilitateerror correction of the outer correction code.
 13. The system of claim12, wherein the memory controller further comprises a memory scrubber tocorrect single bit errors via the inner correction code in the pluralityof blocks of the data and to correct multiple bit errors via the outercorrection code in the plurality of blocks of the data.
 14. The systemof claim 13, wherein if the memory controller updates less than a lengthN of bytes specified for the plurality of blocks of data, a flag is setindicating the outer correction code is invalid and the memory scrubbermonitors the flag and updates the outer correction code based on thepartial write initiated to the plurality of blocks of the data.
 15. Thesystem of claim 14, wherein the outer code generator updates the outercorrection code and the memory scrubber resets the flag to valid afterthe length of N bytes has been updated or read by the memory controller.16. The system of claim 12, wherein the outer code generator processesthe block of data and generates a parity code, a Cycle Redundancy Check(CRC) code, a Hamming code, a Bose-Chaudhuri-Hocquenghem (BCH) code, alow density parity check (LDPC) code, or a Reed-Solomon code as theouter correction code.